"""
session是一种用于web应用程序中存储用户会话数据的机制。
"""
from django.http import HttpResponse
from datetime import datetime, timedelta
def set_session(request):
    # 写入session数据
    request.session['username'] = 'super'
    request.session['age'] = 18
    return HttpResponse("session设置成功")

def get_session(request):
    # 读取session数据
    username = request.session.get('username')  # 如果不存在，返回None，不会报错
    age = request.session.get('age')  # 如果不存在，返回None，不会报错
    return HttpResponse(f"读取session成功,用户名:{username}, 年龄:{age}")

def del_session(request):
    # # 清空所有会话值，但保留会话ID
    # request.session.clear() 
    
    # # 测试是否删除成功
    # username = request.session.get('username',"未设置") 
    #---------------------------------------------------------------
    # # 完全删除会话数据，包括会话ID
    # request.session.flush()  # 清空所有会话值，并删除会话ID
    # # 测试是否删除成功
    # username = request.session.session_key  # 如果会话ID已被删除，返回None
    #------------------------------------------------------------------
    # 清除特定的会话值，不删除会话ID
    del request.session['age']  
    # 测试是否删除成功
    data = {
        "username":request.session.get('username',"未设置"),  
        "age":request.session.get('age',"已删除"), 
        "session_key":request.session.session_key  # 如果会话ID已被删除，返回None
    }
    
    return HttpResponse(f"已清除所有会话值,删除后的数据:{data}")

# 设置会话的过期时间（以秒为单位），默认为2周（1209600秒）。
def set_session_expiry(request):
    # 设置会话数据
    request.session['token'] = 'abc123xyz'
    
    # 形式1：整数秒数，30分钟（1800秒）过期
    # request.session.set_expiry(1800)  
    
    # 一天以后过期
    # request.session.set_expiry(timedelta(days=1))  
    # 关闭浏览器，会话过期
    request.session.set_expiry(0)
    # 获取过期时间
    expire_date = request.session.get_expiry_date()  
    return HttpResponse(f"会话已设置,将在{expire_date}后过期")